﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace Schedule
{
    class Program
    {
        static Dictionary<DateTime, Action> shedule = new Dictionary<DateTime, Action>();
        static void CheckShedule(object args)
        {
            DateTime dt = DateTime.Now;
            dt = new DateTime(dt.Year, dt.Month, dt.Day, dt.Hour, dt.Minute, dt.Second);
            if (shedule.ContainsKey(dt))
            {
                shedule[dt]();
            }
        }
        //Получаем команду со строки после символа "|"
        static string ParseCommand(string str)
        {
            return str.Substring(str.LastIndexOf("| "), str.Length - str.LastIndexOf("| "));
        }
        //Получаем дату со строки до символа "|"
        static DateTime ParseDateTime(string str)
        {
            return Convert.ToDateTime(str.Substring(0, str.IndexOf("|")));
        }
        static void SayHello()
        {
            Console.WriteLine("Hello ");
        }
        //Это цель делегата Action
        //Выполнение дейсвтия, указанного ключевым словом (которое у нас в строке после "|")
        static void DoCommand(string str)
        {
            Dictionary<string, int> commands = new Dictionary<string, int>();
            commands.Add("SayHello", 1);
            commands.Add("SayWorld", 2);
            commands.Add("You must study!!", 3);
            commands.Add("Empty your mind", 4);

            switch (commands[str])
            {
                case 1: SayHello();
                    break;
                case 2: SayWorld();
                    break;
                case 3: Console.WriteLine("You must study!!");
                    break;
                case 4: Console.WriteLine("Empty your mind");
                    break;
                default:
                    break;
            }
        }
        static void SayWorld()
        {
            Console.WriteLine("World!");
        }
        static void Main(string[] args)
        {
            
            using (StreamReader str = new StreamReader(@"schedule.txt"))
            {
                string line = null;
                while ((line = str.ReadLine()) != null)
                {
                    string command = ParseCommand(line);
                    DateTime dt = ParseDateTime(line);
                    //Используем Action<> для указания на DoCommand
                    Action<string> comandAction = new Action<string>(DoCommand);
                    shedule.Add(dt, comandAction(command));
                }
            }



            Timer timer = new Timer(CheckShedule, null, 0, 1000);
            Console.ReadLine();
        }
    }
}
